<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta http-equiv="pragma" content="no-cache" />
    <meta http-equiv="Cache-Control" content="no-cache, must-revalidate" />
    <meta http-equiv="expires" content="0" />
    <title>作者介绍</title>
</head>
<body>
    <canvas id="mycanvas" width="1000" height="700" style="position: fixed; left: 0px; top: 0px;"/>
    <script type="text/javascript" src="facecat.js"></script>
    <script type="text/javascript">
        let canvas = document.getElementById("mycanvas"); //绘图区域
        canvas.width = window.innerWidth;
        canvas.height = window.innerHeight;
        let gPaint = new FCPaint(); //绘图对象
        gPaint.canvas = canvas;
        gPaint.defaultUIStyle = "dark";
        scaleCanvas(gPaint);
        //判断是否移动端
        gPaint.isMobile = isMobileMode();
        if (gPaint.isMobile) {
            gPaint.scaleFactorX = 2.5;
            gPaint.scaleFactorY = 2.5;
        }else{
            gPaint.defaultUIStyle = "light";
        }
        addDefaultEvent(canvas, gPaint);

        let backView  = new FCView();
        backView.dock = "fill";
        if(gPaint.defaultUIStyle == "dark"){
            backView.backColor = "rgb(0,0,0)";
        }else{
            backView.backColor = "rgb(255,255,255)";
        }
        addView(backView, gPaint);

        let showIndex = 0;

        /*
        * 点击方法
        * view:视图
        * firstTouch:是否第一次触摸
        * firstPoint:第一次触摸的坐标
        * secondTouch:是否第二次触摸
        * secondPoint:第二次触摸的坐标
        * clicks:点击次数
        */
        gPaint.onClick = function (view, firstTouch, firstPoint, secondTouch, secondPoint, clicks) {
            onClickDefault(view, firstTouch, firstPoint, secondTouch, secondPoint, clicks);
            let aR = 40;
            let aLeft = 95;
            if(firstPoint.x > 280 && firstPoint.y < 52){
                window.location.href = "https://www.jjmfc.com";
                return;
            }
            for(let i = 0; i < 6; i++){
                let aRect = new FCRect(aLeft, 52, aLeft + aR, 52 + 30);
                if(firstPoint.x >= aRect.left && firstPoint.x <= aRect.right && firstPoint.y <= aRect.bottom){
                    showIndex = i;
                    return;
                }
                aLeft += aR;
            }
            showIndex++;
            if(showIndex > 5){
                showIndex = 0;
            }
        };

        let iconImage = null;
        let loadImage = false;

        /*
        * 绘制圆形文字
        */
        let drawRoundText = function(paint, text, font, color1, color2, x, y, sx, sx2, sy){
            let wxSize = paint.textSize(text, font);
            if(sy > 0){
                paint.fillRoundRect(color1, x - 5, y - 3 - sy, x + wxSize.cx + 5, y + wxSize.cy + 2 + sy, 0);
                paint.drawRoundRect(color2, 1, 0, x - 5, y - 3 - sy, x + wxSize.cx + 5, y + wxSize.cy + 2 + sy, 0);
            }else{
                paint.fillRoundRect(color1, x - 5, y - 3, x + wxSize.cx + 5, y + wxSize.cy + 2, 0);
                paint.drawRoundRect(color2, 1, 0, x - 5, y - 3, x + wxSize.cx + 5, y + wxSize.cy + 2, 0);
            }
            if(sx != 0){
                paint.drawLine(color2, 1, 0, x + sx, y - 3, x + sx, y + wxSize.cy + 2);
            }
            if(sx2 != 0){
                paint.drawLine(color2, 1, 0, x + sx2, y - 3, x + sx2, y + wxSize.cy + 2);
            }
            if(paint.defaultUIStyle == "dark"){
                paint.drawText(text, "rgb(220,220,220)", "Default,14", x, y);
            }else{
                paint.drawText(text, "rgb(35,35,35)", "Default,14", x, y);
            }
        };

        /*
        * 重绘背景的实现方法
        * view:视图
        * paint:绘图对象
        * clipRect:裁剪区域
        */
        gPaint.onPaint = function (view, paint, clipRect) {
            onPaintDefault(view, paint, clipRect);
            if(paint.defaultUIStyle == "dark"){
                paint.fillRect("rgb(0,0,0)", 0, 0, view.size.cx, view.size.cy);
            }else{
                paint.fillRect("rgb(255,255,255)", 0, 0, view.size.cx, view.size.cy);
            }
            if(!loadImage){
                let image = new Image();
                image.onload = function () {
                    iconImage = image;
                    invalidate(gPaint);
                };
                image.src = "https://www.jjmfc.com/images/taode.png";
                loadImage = true;
            }else{
                let iTick = parseInt(tick / (360 / 5));
                if(iTick > 4){
                    iTick = 4;
                }
                let tWidth = 370;
                if(paint.isMobile){
                    tWidth = backView.size.cx;
                }
                if(paint.defaultUIStyle == "dark"){
                    paint.fillRect("rgb(25,25,25)", 0, 0, backView.size.cx, 80);
                }else{
                    paint.fillRect("rgb(230,230,230)", 0, 0, backView.size.cx, 80);
                }
                if(iconImage){
                    paint.drawImage(iconImage, 10, 5, 80, 75);
                    let iconRect = new FCRect(10, 5, 80, 75);
                    paint.drawRect("rgb(75,137,220)", 2, 0, iconRect.left, iconRect.top, iconRect.right, iconRect.bottom);
                    let lvFont = "Default,12,bold";
                    let lvStr = "LV99";
                    let lvSize = paint.textSize(lvStr, lvFont);
                    let points = new Array();
                    points.push(new FCPoint(iconRect.right - 35, iconRect.bottom));
                    points.push(new FCPoint(iconRect.right, iconRect.bottom));
                    points.push(new FCPoint(iconRect.right, iconRect.bottom - 35));
                    paint.fillPolygon("rgba(75,137,220,160)", points);
                    paint.drawText(lvStr, "rgb(255,255,255)", lvFont, iconRect.right - lvSize.cx - 3, iconRect.bottom - lvSize.cy - 3);
                }
                let font = "Default,18";
                let font2 = "Default,14";
                let text = "陶德";
                let tSize = paint.textSize(text, font);
                if(paint.defaultUIStyle == "dark"){
                    paint.drawText(text, "rgb(255,255,255)", font, 98, 11);
                }else{
                    paint.drawText(text, "rgb(0,0,0)", font, 98, 11);
                }
                drawRoundText(paint, "微信号  suade1984", "Default,14", "rgba(140,192,81,100)", "rgba(140,192,81,150)", 148, 13, 46, 0, 0);
                if(paint.defaultUIStyle == "dark"){
                    paint.drawText("经济学专业(文科)", "rgb(200,200,200)", font2, 98, 36);
                }else{
                    paint.drawText("经济学专业(文科)", "rgb(55,55,55)", font2, 98, 36);
                }
                //paint.drawText("创业等级6", "rgb(246,187,67)", font2, 220, 36);
                drawRoundText(paint, " 官网 ", "Default,14", "rgba(170,178,189,50)", "rgba(170,178,189,100)", 293, 22, 0, 0, 10);
                if(showIndex == 5){
                    if(paint.defaultUIStyle == "dark"){
                        paint.drawText("接下来的工作计划", "rgb(150,150,150)", font2, 10, 90);
                    }else{
                        paint.drawText("接下来的工作计划", "rgb(100,100,100)", font2, 10, 90);
                    }
                    let works = new Array();
                    works.push("框架的示例和课程制作");
                    works.push("终端的应用市场上架");
                    works.push("行业解决方案的整理");
                    works.push("短视频的拍摄和运营");
                    works.push("对接第三方的项目");
                    works.push("适配国产操作系统");
                    works.push("嵌入式相关的研究");
                    works.push("开展外部交流合作");
                    works.push("探索盈利业务模式");
                    works.push("避免商业冲突和矛盾");
                    works.push("不加入别人的创业");
                    works.push("高度专注于该项目");
                    works.push("保守谨慎不激进");
                    works.push("远离所有反对人士");
                    let works2 = new Array();
                    works2.push("参照别人的做法");
                    works2.push("Apple和微软应用市场");
                    works2.push("涉及多个行业");
                    works2.push("农村程序员的日常");
                    works2.push("仅有1/4人的劳动力");
                    works2.push("Deepin和UOS等");
                    works2.push("开发对应的框架");
                    works2.push("上门和外出均可");
                    works2.push("坚持合法合规");
                    works2.push("创新风格和赛道");
                    works2.push("完全独立自主");
                    works2.push("不讨论无关话题");
                    works2.push("采用稳扎稳打的方式");
                    works2.push("通通拉入黑名单");
                    let lTop = 110;
                    for(let i = 0; i < works.length; i++){
                        let str = works[i];
                        let sFont = "Default,14";
                        let sFont2 = "Default,12";
                        if(paint.defaultUIStyle == "dark"){
                            paint.fillRoundRect("rgba(25,25,25,50)", 10, lTop, tWidth - 10, lTop + 35, 0);
                            paint.fillRoundRect("rgb(50,50,50)", 10, lTop, 10 + 35, lTop + 35, 0);
                            paint.drawRoundRect("rgb(75,75,75)", 1, 0, 10, lTop, tWidth - 10, lTop + 35, 0);
                        }else{
                            paint.fillRoundRect("rgba(230,230,230,50)", 10, lTop, tWidth - 10, lTop + 35, 0);
                            paint.fillRoundRect("rgb(200,200,200)", 10, lTop, 10 + 35, lTop + 35, 0);
                            paint.drawRoundRect("rgb(175,175,175)", 1, 0, 10, lTop, tWidth - 10, lTop + 35, 0);
                        }
                        let bColor = "rgb(42,138,195)";
                        let bColor2 = "rgba(42,138,195,200)";
                        if(paint.defaultUIStyle == "dark"){
                            paint.drawLine("rgb(75,75,75)", 1, 0, 10 + 35, lTop, 10 + 35, lTop + 35);
                        }else{
                            paint.drawLine("rgb(175,175,175)", 1, 0, 10 + 35, lTop, 10 + 35, lTop + 35);
                        }
                        let sSize = paint.textSize((i + 1).toString(), sFont);
                        if(paint.defaultUIStyle == "dark"){
                            paint.drawText((i + 1).toString(), "rgb(200,200,200)", sFont, 10 + (35 - sSize.cx) / 2, lTop + (35 - sSize.cy) / 2);
                        }else{
                            paint.drawText((i + 1).toString(), "rgb(50,50,50)", sFont, 10 + (35 - sSize.cx) / 2, lTop + (35 - sSize.cy) / 2);
                        }
                        let ttSize = paint.textSize(str, sFont);
                        if(paint.defaultUIStyle == "dark"){
                            paint.drawText(str, "rgb(200,200,200)", sFont, 10 + 45, lTop + (35 - ttSize.cy) / 2);  
                        }else{
                            paint.drawText(str, "rgb(50,50,50)", sFont, 10 + 45, lTop + (35 - ttSize.cy) / 2); 
                        }
                        let str2 = "(" + works2[i] + ")";
                        let ttSize2 = paint.textSize(str2, sFont2);   
                        if(paint.defaultUIStyle == "dark"){       
                            paint.drawText(str2, "rgb(150,150,150)", sFont2, 10 + 50 + ttSize.cx, lTop + (35 - ttSize2.cy) / 2 + 1); 
                        }else{
                            paint.drawText(str2, "rgb(50,50,50)", sFont2, 10 + 50 + ttSize.cx, lTop + (35 - ttSize2.cy) / 2 + 1); 
                        }
                        iTick = parseInt(tick / (360 / works.length));
                        if(iTick > (works.length - 1)){
                            iTick = (works.length - 1);
                        }
                        if(iTick == i){
                            let overTimes = tick % 30 * 12;
                            let dRect = new FCRect(10, lTop, tWidth - 10, lTop + 35);
                            let dWidth = Math.min(dRect.right - dRect.left, dRect.bottom - dRect.top) / 2;
                            let dInterval = 0;
                            paint.drawRect(bColor, 1, 0, dRect.left, dRect.top, dRect.right, dRect.bottom);
                            if (overTimes < 90) {
                                let fSize = (90 - overTimes) * (dWidth - dInterval) / 60;
                                let eSize = overTimes * (dWidth - dInterval) / 60;
                                paint.drawLine(bColor2, 3, 0, dRect.right - fSize, dRect.top, dRect.right, dRect.top);
                                paint.drawLine(bColor2, 3, 0, dRect.right, dRect.top, dRect.right, dRect.top + eSize);
                            }
                            else if (overTimes < 180) {
                                let fSize = (90 - (overTimes - 90)) * (dWidth - dInterval) / 60;
                                let eSize = (overTimes - 90) * (dWidth - dInterval) / 60;
                                paint.drawLine(bColor2, 3, 0, dRect.right, dRect.bottom - fSize, dRect.right, dRect.bottom);
                                paint.drawLine(bColor2, 3, 0, dRect.right, dRect.bottom, dRect.right - eSize, dRect.bottom);
                            }
                            else if (overTimes < 270) {
                                let fSize = (90 - (overTimes - 180)) * (dWidth - dInterval) / 60;
                                let eSize = (overTimes - 180) * (dWidth - dInterval) / 60;
                                paint.drawLine(bColor2, 3, 0, dRect.left, dRect.bottom, dRect.left + fSize, dRect.bottom);
                                paint.drawLine(bColor2, 3, 0, dRect.left, dRect.bottom, dRect.left, dRect.bottom - eSize);
                            }
                            else if (overTimes < 360) {
                                let fSize = (90 - (overTimes - 270)) * (dWidth - dInterval) / 60;
                                let eSize = (overTimes - 270) * (dWidth - dInterval) / 60;
                                paint.drawLine(bColor2, 3, 0, dRect.left, dRect.top, dRect.left + eSize, dRect.top);
                                paint.drawLine(bColor2, 3, 0, dRect.left, dRect.top, dRect.left, dRect.top + fSize);
                            }
                        }       
                        lTop += 45;
                    }
                }
                else if(showIndex == 4){
                    let sFont2 = "Default,13";
                    if(paint.defaultUIStyle == "dark"){       
                        paint.drawText("使用过的第三方技术(不包含编程语言和操作系统)", "rgb(150,150,150)", font2, 10, 90);
                    }else{
                        paint.drawText("使用过的第三方技术(不包含编程语言和操作系统)", "rgb(100,100,100)", font2, 10, 90);
                    }
                    let str = "[SilverLight、Qt、PyQt、Devexpress、TailWind、jQuery、MFC、Ant Design、JavaFX、Flutter、ReactNative、React、Vue、UniApp、UniAppX、SwiftUI、Tkinter、GTK+、wxPython、wxWidgets、ImGui、EasyX、Maui、Avalonia、DuiLib、WPF、Swing、PHP、Delphi、Shoes、FXRuby、HarmonyOS、Android、MacOS、iOS、Winform、DirectUI、Boostrap、AngularJS、LayUI、Electron、Tauri、Next.js、Office Extension、Wails]、 [Cocos2d、Unity3D、OpenGL、SDL2、three.js、Skia、DirectX、GODOT、Pixl.js]、 [Kafka、RabbitMQ]、 [Docker、K8S]、 [Pytorch、Tensorflow、StableDiffusion、mediapipe、Llama2、OpenCV]、 [Hadoop、JSP、ASP.NET、Blazor、Gin、Beego、Spring-Boot、nginx、Django、Flask、FastAPI、Nuxt.js、SSR、Netty、node.js、nest.js、Tomcat、IIS]、 [HBase、Oracle、Redis、MongoDB、Spark、Elasticsearch、SQLServer、PostgreSQL、MySQL、indexDB]、 [Crmeb、LiLiShop、element-ui、RuoYi、cesium、ThinkPHP、5kcrm]、 [QuickJS、ffmpeg、log4、pandas、numpy、scrapy、LLVM、MinGW、Boost、Scintilla、LuaInterface、Maven、ZooKeeper、Jetbrains、Jira、WebView2、Cef、POI、宝塔、ManacoEditor、CodeMirror]、 [echarts、HighCharts、CTP、T2SDK、易胜、盈透、飞马、飞创、中泰XTP、QMT、华鑫奇点、vnpy、上交所LV2、深证Fast、华泰INSIGHT、银河星耀、QStock、tushare、pyqtgraph、HQChart、klinecharts、pine]...";
                    let dTop = 117;
                    let pos = 0;
                    let textLength = str.length;
                    let drawText = "";
                    while (pos < textLength) {
                        drawText += str[pos];
                        let dSize = paint.textSize(drawText, sFont2);
                        if (dSize.cx > tWidth - 20 || pos == textLength - 1) {
                            if(paint.defaultUIStyle == "dark"){  
                                paint.drawText(drawText, "rgb(200,200,200)", sFont2, 10, dTop);
                            }else{
                                paint.drawText(drawText, "rgb(50,50,50)", sFont2, 10, dTop);
                            }
                            drawText = "";
                            dTop += 24;
                        }
                        pos++;
                    }
                }
                else if(showIndex == 3){
                    if(paint.defaultUIStyle == "dark"){       
                        paint.drawText("金融分析和量化研发经历", "rgb(150,150,150)", font2, 10, 90);
                    }else{
                        paint.drawText("金融分析和量化研发经历", "rgb(100,100,100)", font2, 10, 90);
                    }
                    let functions = new Array();
                    functions.push("Choice资讯架构 东方财富");
                    functions.push("期货交易系统架构 东吴证券");
                    functions.push("DTS策略交易架构 大智慧龙软");
                    functions.push("行情推送服务(全球市场) 东方财富");
                    functions.push("条件选股 东方财富");
                    functions.push("数据浏览器 东方财富");
                    functions.push("专题统计 东方财富");
                    functions.push("研报公告新闻 东方财富");
                    functions.push("交易接口封装 大智慧龙软");
                    functions.push("多账户和子账户 大智慧龙软");
                    functions.push("撮合交易 德意志银行");
                    functions.push("量化回测 大智慧龙软");
                    functions.push("相似数据 德意志银行");
                    functions.push("组合管理 东方财富");
                    functions.push("键盘精灵(100万+品种) 东方财富");
                    functions.push("经济数据库(200万+指标) 东方财富");
                    functions.push("财务纵比和盈利预测 东方财富");
                    functions.push("风控管理 大智慧龙软");
                    functions.push("F9深度资料 东方财富");
                    functions.push("板块管理 东方财富");
                    functions.push("性能内存优化 专项责任");
                    functions.push("稳定和安全性 专项责任");
                    let dHeight = 30;
                    let lTop = 110;
                    for(let i = 0; i < functions.length; i++){
                        let func = functions[i];
                        let sFont = "Default,14";
                        let sFont2 = "Default,13";
                        let sSize = paint.textSize("AAABBB", sFont2);
                        if(paint.defaultUIStyle == "dark"){       
                            paint.fillRoundRect("rgba(25,25,25,50)", 10, lTop, tWidth - 10, lTop + dHeight - 3, 0);
                            paint.fillRoundRect("rgb(50,50,50)", 10, lTop, 10 + dHeight - 3, lTop + dHeight - 3, 0);
                            paint.drawRoundRect("rgb(75,75,75)", 1, 0, 10, lTop, tWidth - 10, lTop + dHeight - 3, 0);
                            paint.drawLine("rgb(75,75,75)", 1, 0, 10 + dHeight - 3, lTop, 10 + dHeight - 3, lTop + dHeight - 3);
                        }else{
                            paint.fillRoundRect("rgba(230,230,230,50)", 10, lTop, tWidth - 10, lTop + dHeight - 3, 0);
                            paint.fillRoundRect("rgb(200,200,200)", 10, lTop, 10 + dHeight - 3, lTop + dHeight - 3, 0);
                            paint.drawRoundRect("rgb(175,175,175)", 1, 0, 10, lTop, tWidth - 10, lTop + dHeight - 3, 0);
                            paint.drawLine("rgb(175,175,175)", 1, 0, 10 + dHeight - 3, lTop, 10 + dHeight - 3, lTop + dHeight - 3);
                        }
                        let sSize2 = paint.textSize((i + 1).toString(), sFont);
                        if(paint.defaultUIStyle == "dark"){       
                            paint.drawText((i + 1).toString(), "rgb(200,200,200)", sFont, 10 + (dHeight - 3 - sSize2.cx) / 2, lTop + (dHeight - 3 - sSize2.cy) / 2);
                        }else{
                            paint.drawText((i + 1).toString(), "rgb(50,50,50)", sFont, 10 + (dHeight - 3 - sSize2.cx) / 2, lTop + (dHeight - 3 - sSize2.cy) / 2);
                        }
                        let strs = func.split(' ');
                        let sLeft = 42;
                        for(let j = 0; j < strs.length; j++){
                            let str = strs[j];
                            let ssSize = paint.textSize(str, sFont2);
                            if(paint.defaultUIStyle == "dark"){       
                                paint.drawText(str, "rgb(200,200,200)", sFont2, sLeft, lTop + (dHeight - 3 - sSize.cy) / 2);
                            }else{
                                paint.drawText(str, "rgb(50,50,50)", sFont2, sLeft, lTop + (dHeight - 3 - sSize.cy) / 2);
                            }
                            if(j == 0){
                                sLeft = 220;
                                if(paint.defaultUIStyle == "dark"){       
                                    paint.drawLine("rgb(75,75,75)", 1, 0, sLeft - 5, lTop, sLeft - 5, lTop + dHeight - 3);
                                }else{
                                    paint.drawLine("rgb(175,175,175)", 1, 0, sLeft - 5, lTop, sLeft - 5, lTop + dHeight - 3);
                                }
                            }else{
                                sLeft += ssSize.cx + 3;
                            }
                        }
                        iTick = parseInt(tick / (360 / functions.length));
                        if(iTick > (functions.length - 1)){
                            iTick = (functions.length - 1);
                        }
                        let bColor = "rgb(42,138,195)";
                        let bColor2 = "rgba(42,138,195,200)";
                        if(iTick == i){
                            let overTimes = tick % 30 * 12;
                            let dRect = new FCRect(10, lTop, tWidth - 10, lTop + dHeight - 3);
                            let dWidth = Math.min(dRect.right - dRect.left, dRect.bottom - dRect.top) / 2;
                            let dInterval = 0;
                            paint.drawRect(bColor, 1, 0, dRect.left, dRect.top, dRect.right, dRect.bottom);
                            if (overTimes < 90) {
                                let fSize = (90 - overTimes) * (dWidth - dInterval) / 60;
                                let eSize = overTimes * (dWidth - dInterval) / 60;
                                paint.drawLine(bColor2, 3, 0, dRect.right - fSize, dRect.top, dRect.right, dRect.top);
                                paint.drawLine(bColor2, 3, 0, dRect.right, dRect.top, dRect.right, dRect.top + eSize);
                            }
                            else if (overTimes < 180) {
                                let fSize = (90 - (overTimes - 90)) * (dWidth - dInterval) / 60;
                                let eSize = (overTimes - 90) * (dWidth - dInterval) / 60;
                                paint.drawLine(bColor2, 3, 0, dRect.right, dRect.bottom - fSize, dRect.right, dRect.bottom);
                                paint.drawLine(bColor2, 3, 0, dRect.right, dRect.bottom, dRect.right - eSize, dRect.bottom);
                            }
                            else if (overTimes < 270) {
                                let fSize = (90 - (overTimes - 180)) * (dWidth - dInterval) / 60;
                                let eSize = (overTimes - 180) * (dWidth - dInterval) / 60;
                                paint.drawLine(bColor2, 3, 0, dRect.left, dRect.bottom, dRect.left + fSize, dRect.bottom);
                                paint.drawLine(bColor2, 3, 0, dRect.left, dRect.bottom, dRect.left, dRect.bottom - eSize);
                            }
                            else if (overTimes < 360) {
                                let fSize = (90 - (overTimes - 270)) * (dWidth - dInterval) / 60;
                                let eSize = (overTimes - 270) * (dWidth - dInterval) / 60;
                                paint.drawLine(bColor2, 3, 0, dRect.left, dRect.top, dRect.left + eSize, dRect.top);
                                paint.drawLine(bColor2, 3, 0, dRect.left, dRect.top, dRect.left, dRect.top + fSize);
                            }
                        }   
                        lTop += dHeight;
                    }
                }
                else if(showIndex == 2){
                    let functions = new Array();
                    if(paint.defaultUIStyle == "dark"){       
                        paint.drawText("自研高级技术和框架", "rgb(150,150,150)", font2, 10, 90);
                    }else{
                        paint.drawText("自研高级技术和框架", "rgb(100,100,100)", font2, 10, 90);
                    }
                    functions.push("虚拟视图 对接几十种语言和绘图引擎");
                    functions.push("通讯服务 长短连接，自己解析协议");
                    functions.push("多端互动 私有化部署，电脑和手机组队互动");
                    functions.push("云网盘 跨设备访问和操作文件");
                    functions.push("代码编辑器 底层语言编写，代码高亮");
                    functions.push("内存数据库 保存键值对，可实时落地硬盘");
                    functions.push("套壳浏览器 电脑和手机端均已上线");
                    functions.push("屏幕绘图 在电脑屏幕最前面渲染");
                    functions.push("可视化设计 拖拽生成各种界面");
                    functions.push("卷积神经网络 已用于相似数据判断");
                    functions.push("基因化组件 分拆上千独立基因，任意组合");
                    functions.push("编程语言 用于多端互动，驱动基因");
                    functions.push("碎片化更新 通过差异对比最小化更新数据");
                    functions.push("并行计算 不同计算机分开执行任务");
                    functions.push("协同代码 多台电脑手机实时编写同份代码");
                    functions.push("自动化测试 集群规模化执行测试任务");
                    functions.push("镜像虫洞 虚拟视图投射到多个地方显示");
                    functions.push("动态桌面 视频或界面发送到桌面成为壁纸");
                    functions.push("融合模式 框架可与大量第三方高度结合");
                    functions.push("极限优化 最大提升内存性能体积等指标");
                    let dHeight = 30;
                    let lTop = 110;
                    for(let i = 0; i < functions.length; i++){
                        let func = functions[i];
                        let sFont = "Default,14";
                        let sFont2 = "Default,13";
                        let sSize = paint.textSize("AAABBB", sFont2);
                        if(paint.defaultUIStyle == "dark"){     
                            paint.fillRoundRect("rgba(25,25,25,50)", 10, lTop, tWidth - 10, lTop + dHeight - 3, 0);
                            paint.fillRoundRect("rgb(50,50,50)", 10, lTop, 10 + dHeight - 3, lTop + dHeight - 3, 0);
                            paint.drawRoundRect("rgb(75,75,75)", 1, 0, 10, lTop, tWidth - 10, lTop + dHeight - 3, 0);
                            paint.drawLine("rgb(75,75,75)", 1, 0, 10 + dHeight - 3, lTop, 10 + dHeight - 3, lTop + dHeight - 3);
                        }else{
                            paint.fillRoundRect("rgba(230,230,230,50)", 10, lTop, tWidth - 10, lTop + dHeight - 3, 0);
                            paint.fillRoundRect("rgb(200,200,200)", 10, lTop, 10 + dHeight - 3, lTop + dHeight - 3, 0);
                            paint.drawRoundRect("rgb(175,175,175)", 1, 0, 10, lTop, tWidth - 10, lTop + dHeight - 3, 0);
                            paint.drawLine("rgb(175,175,175)", 1, 0, 10 + dHeight - 3, lTop, 10 + dHeight - 3, lTop + dHeight - 3);
                        }
                        let sSize2 = paint.textSize((i + 1).toString(), sFont);
                        if(paint.defaultUIStyle == "dark"){     
                            paint.drawText((i + 1).toString(), "rgb(200,200,200)", sFont, 10 + (dHeight - 3 - sSize2.cx) / 2, lTop + (dHeight - 3 - sSize2.cy) / 2);
                        }else{
                            paint.drawText((i + 1).toString(), "rgb(50,50,50)", sFont, 10 + (dHeight - 3 - sSize2.cx) / 2, lTop + (dHeight - 3 - sSize2.cy) / 2);
                        }
                        let strs = func.split(' ');
                        let sLeft = 42;
                        for(let j = 0; j < strs.length; j++){
                            let str = strs[j];
                            let ssSize = paint.textSize(str, sFont2);
                            if(paint.defaultUIStyle == "dark"){     
                                paint.drawText(str, "rgb(200,200,200)", sFont2, sLeft, lTop + (dHeight - 3 - sSize.cy) / 2);
                            }else{
                                paint.drawText(str, "rgb(50,50,50)", sFont2, sLeft, lTop + (dHeight - 3 - sSize.cy) / 2);
                            }
                            if(j == 0){
                                sLeft = 130;
                                if(paint.defaultUIStyle == "dark"){     
                                    paint.drawLine("rgb(75,75,75)", 1, 0, sLeft - 5, lTop, sLeft - 5, lTop + dHeight - 3);
                                }else{
                                    paint.drawLine("rgb(175,175,175)", 1, 0, sLeft - 5, lTop, sLeft - 5, lTop + dHeight - 3);
                                }
                            }else{
                                sLeft += ssSize.cx + 3;
                            }
                        }
                        iTick = parseInt(tick / (360 / functions.length));
                        if(iTick > (functions.length - 1)){
                            iTick = (functions.length - 1);
                        }
                        let bColor = "rgb(42,138,195)";
                        let bColor2 = "rgba(42,138,195,200)";
                        if(iTick == i){
                            let overTimes = tick % 30 * 12;
                            let dRect = new FCRect(10, lTop, tWidth - 10, lTop + dHeight - 3);
                            let dWidth = Math.min(dRect.right - dRect.left, dRect.bottom - dRect.top) / 2;
                            let dInterval = 0;
                            paint.drawRect(bColor, 1, 0, dRect.left, dRect.top, dRect.right, dRect.bottom);
                            if (overTimes < 90) {
                                let fSize = (90 - overTimes) * (dWidth - dInterval) / 60;
                                let eSize = overTimes * (dWidth - dInterval) / 60;
                                paint.drawLine(bColor2, 3, 0, dRect.right - fSize, dRect.top, dRect.right, dRect.top);
                                paint.drawLine(bColor2, 3, 0, dRect.right, dRect.top, dRect.right, dRect.top + eSize);
                            }
                            else if (overTimes < 180) {
                                let fSize = (90 - (overTimes - 90)) * (dWidth - dInterval) / 60;
                                let eSize = (overTimes - 90) * (dWidth - dInterval) / 60;
                                paint.drawLine(bColor2, 3, 0, dRect.right, dRect.bottom - fSize, dRect.right, dRect.bottom);
                                paint.drawLine(bColor2, 3, 0, dRect.right, dRect.bottom, dRect.right - eSize, dRect.bottom);
                            }
                            else if (overTimes < 270) {
                                let fSize = (90 - (overTimes - 180)) * (dWidth - dInterval) / 60;
                                let eSize = (overTimes - 180) * (dWidth - dInterval) / 60;
                                paint.drawLine(bColor2, 3, 0, dRect.left, dRect.bottom, dRect.left + fSize, dRect.bottom);
                                paint.drawLine(bColor2, 3, 0, dRect.left, dRect.bottom, dRect.left, dRect.bottom - eSize);
                            }
                            else if (overTimes < 360) {
                                let fSize = (90 - (overTimes - 270)) * (dWidth - dInterval) / 60;
                                let eSize = (overTimes - 270) * (dWidth - dInterval) / 60;
                                paint.drawLine(bColor2, 3, 0, dRect.left, dRect.top, dRect.left + eSize, dRect.top);
                                paint.drawLine(bColor2, 3, 0, dRect.left, dRect.top, dRect.left, dRect.top + fSize);
                            }
                        }   
                        lTop += dHeight;
                    }
                }
                else if(showIndex == 1){
                    if(paint.defaultUIStyle == "dark"){     
                        paint.drawText("自研国产基础框架和软件版图", "rgb(150,150,150)", font2, 10, 90);
                    }else{
                        paint.drawText("自研国产基础框架和软件版图", "rgb(100,100,100)", font2, 10, 90);
                    }
                    let functions = new Array();
                    functions.push("C++桌面 Qt MFC DuiLib 花卷猫 Gtk WxWidgets");
                    functions.push("C#桌面 Maui Avalonia Devexpress 花卷猫 WPF");
                    functions.push("Java桌面 Swing JavaFx 花卷猫");
                    functions.push("MacOS原生 Qt 花卷猫(C++ SwfitUI)");
                    functions.push("iOS原生 Qt 花卷猫(C++ SwiftUI)");
                    functions.push("安卓原生 Qt 花卷猫(Java Kotlin C++)");
                    functions.push("鸿蒙原生 花卷猫(Java Arkts C++)");
                    functions.push("Python桌面 PyQt Tkinter 花卷猫 wxPython");
                    functions.push("Go桌面 Wails Fyne 花卷猫");
                    functions.push("Native框架 Flutter ReactNative 花卷猫 UniAppX");
                    functions.push("前端框架 Vue React UniApp 花卷猫 PHP WeChat");
                    functions.push("桌面Web框架 Tauri Electron 花卷猫");
                    functions.push("Wasm框架 花卷猫(Rust Go)");
                    functions.push("Ruby桌面 Shoes FXRuby 花卷猫");
                    functions.push("Pascal桌面 Delphi Lazarus 花卷猫");
                    functions.push("服务端框架 Netty Boost 花卷猫(C++ C# Java)");
                    functions.push("内存数据库 Redis MongoDB 花卷猫");
                    functions.push("代码编辑器 VSCode IDEA 花卷猫");
                    functions.push("国内浏览器 腾讯QQ 360 花卷猫");
                    functions.push("人工智能 花卷猫多端互动+相似数据");
                    functions.push("浏览器内核 Chrome 花卷猫微内核");
                    functions.push("编程语言 花卷猫FCScript");
                    let dHeight = 30;
                    let lTop = 110;
                    for(let i = 0; i < functions.length; i++){
                        let func = functions[i];
                        let sFont = "Default,14";
                        let sFont2 = "Default,13";
                        let sSize = paint.textSize("AAABBB", sFont2);
                        if(paint.defaultUIStyle == "dark"){     
                            paint.fillRoundRect("rgba(25,25,25,50)", 10, lTop, tWidth - 10, lTop + dHeight - 3, 0);
                            paint.fillRoundRect("rgb(50,50,50)", 10, lTop, 10 + dHeight - 3, lTop + dHeight - 3, 0);
                            paint.drawRoundRect("rgb(75,75,75)", 1, 0, 10, lTop, tWidth - 10, lTop + dHeight - 3, 0);
                            paint.drawLine("rgb(75,75,75)", 1, 0, 10 + dHeight - 3, lTop, 10 + dHeight - 3, lTop + dHeight - 3);
                        }else{
                            paint.fillRoundRect("rgba(230,230,230,50)", 10, lTop, tWidth - 10, lTop + dHeight - 3, 0);
                            paint.fillRoundRect("rgb(200,200,200)", 10, lTop, 10 + dHeight - 3, lTop + dHeight - 3, 0);
                            paint.drawRoundRect("rgb(175,175,175)", 1, 0, 10, lTop, tWidth - 10, lTop + dHeight - 3, 0);
                            paint.drawLine("rgb(175,175,175)", 1, 0, 10 + dHeight - 3, lTop, 10 + dHeight - 3, lTop + dHeight - 3);
                        }
                        let sSize2 = paint.textSize((i + 1).toString(), sFont);
                        if(paint.defaultUIStyle == "dark"){     
                            paint.drawText((i + 1).toString(), "rgb(200,200,200)", sFont, 10 + (dHeight - 3 - sSize2.cx) / 2, lTop + (dHeight - 3 - sSize2.cy) / 2);
                        }else{
                            paint.drawText((i + 1).toString(), "rgb(50,50,50)", sFont, 10 + (dHeight - 3 - sSize2.cx) / 2, lTop + (dHeight - 3 - sSize2.cy) / 2);
                        }
                        let strs = func.split(' ');
                        let sLeft = 42;
                        for(let j = 0; j < strs.length; j++){
                            let str = strs[j];
                            let ssSize = paint.textSize(str, sFont2);
                            if(paint.defaultUIStyle == "dark"){     
                                paint.drawText(str, "rgb(200,200,200)", sFont2, sLeft, lTop + (dHeight - 3 - sSize.cy) / 2);
                            }else{
                                paint.drawText(str, "rgb(50,50,50)", sFont2, sLeft, lTop + (dHeight - 3 - sSize.cy) / 2);
                            }
                            if(j == 0){
                                sLeft = 128;
                                if(paint.defaultUIStyle == "dark"){     
                                    paint.drawLine("rgb(75,75,75)", 1, 0, sLeft - 5, lTop, sLeft - 5, lTop + dHeight - 3);
                                }else{
                                    paint.drawLine("rgb(175,175,175)", 1, 0, sLeft - 5, lTop, sLeft - 5, lTop + dHeight - 3);
                                }
                            }else{
                                sLeft += ssSize.cx + 3;
                            }
                        }
                        iTick = parseInt(tick / (360 / functions.length));
                        if(iTick > (functions.length - 1)){
                            iTick = (functions.length - 1);
                        }
                        let bColor = "rgb(42,138,195)";
                        let bColor2 = "rgba(42,138,195,200)";
                        if(iTick == i){
                            let overTimes = tick % 30 * 12;
                            let dRect = new FCRect(10, lTop, tWidth - 10, lTop + dHeight - 3);
                            let dWidth = Math.min(dRect.right - dRect.left, dRect.bottom - dRect.top) / 2;
                            let dInterval = 0;
                            paint.drawRect(bColor, 1, 0, dRect.left, dRect.top, dRect.right, dRect.bottom);
                            if (overTimes < 90) {
                                let fSize = (90 - overTimes) * (dWidth - dInterval) / 60;
                                let eSize = overTimes * (dWidth - dInterval) / 60;
                                paint.drawLine(bColor2, 3, 0, dRect.right - fSize, dRect.top, dRect.right, dRect.top);
                                paint.drawLine(bColor2, 3, 0, dRect.right, dRect.top, dRect.right, dRect.top + eSize);
                            }
                            else if (overTimes < 180) {
                                let fSize = (90 - (overTimes - 90)) * (dWidth - dInterval) / 60;
                                let eSize = (overTimes - 90) * (dWidth - dInterval) / 60;
                                paint.drawLine(bColor2, 3, 0, dRect.right, dRect.bottom - fSize, dRect.right, dRect.bottom);
                                paint.drawLine(bColor2, 3, 0, dRect.right, dRect.bottom, dRect.right - eSize, dRect.bottom);
                            }
                            else if (overTimes < 270) {
                                let fSize = (90 - (overTimes - 180)) * (dWidth - dInterval) / 60;
                                let eSize = (overTimes - 180) * (dWidth - dInterval) / 60;
                                paint.drawLine(bColor2, 3, 0, dRect.left, dRect.bottom, dRect.left + fSize, dRect.bottom);
                                paint.drawLine(bColor2, 3, 0, dRect.left, dRect.bottom, dRect.left, dRect.bottom - eSize);
                            }
                            else if (overTimes < 360) {
                                let fSize = (90 - (overTimes - 270)) * (dWidth - dInterval) / 60;
                                let eSize = (overTimes - 270) * (dWidth - dInterval) / 60;
                                paint.drawLine(bColor2, 3, 0, dRect.left, dRect.top, dRect.left + eSize, dRect.top);
                                paint.drawLine(bColor2, 3, 0, dRect.left, dRect.top, dRect.left, dRect.top + fSize);
                            }
                        }   
                        lTop += dHeight;
                    }
                }else{
                    let dR = 220;
                    let divRect = new FCRect(tWidth - dR, 105, tWidth, 105 + dR);
                    let alpha = "230";
                    let strColor = "50,123,220";
                    let oX = divRect.left + (divRect.right - divRect.left) / 2;
                    let oY = divRect.top + (divRect.bottom - divRect.top) / 2;
                    let r = (divRect.right - divRect.left) / 2;
                    let rPoints = new Array();
                    let rPoints2 = new Array();
                    let rPoints3 = new Array();
                    let rPoints4 = new Array();
                    let tFont = "Default,14";
                    for(let i = 0; i < 6; i++){
                        let angle = i * 60 - 60 + tick;
                        let angle2 = angle;
                        let cR = r * parseInt(rates[i]) / 100;
                        let cX = oX + (cR * Math.cos(angle2 * 3.14 / 180));
                        let cY = oY + (cR * Math.sin(angle2 * 3.14 / 180));
                        let cX2 = oX + (r * Math.cos(angle * 3.14 / 180));
                        let cY2 = oY + (r * Math.sin(angle * 3.14 / 180));
                        let cX3 = oX + (r / 3 * Math.cos(angle * 3.14 / 180));
                        let cY3 = oY + (r / 3 * Math.sin(angle * 3.14 / 180));
                        let cX4 = oX + (r * 2 / 3 * Math.cos(angle * 3.14 / 180));
                        let cY4 = oY + (r * 2 / 3 * Math.sin(angle * 3.14 / 180));
                        rPoints.push(new FCPoint(cX, cY));
                        rPoints2.push(new FCPoint(cX2, cY2));
                        rPoints3.push(new FCPoint(cX3, cY3));
                        rPoints4.push(new FCPoint(cX4, cY4));
                        let cX5 = oX + ((r + 25) * Math.cos(angle * 3.14 / 180));
                        let cY5 = oY + ((r + 25) * Math.sin(angle * 3.14 / 180));
                    }
                    let dColor = "rgb(30,30,30)";
                    if(paint.defaultUIStyle == "light"){
                        dColor = "rgb(220,220,220)";
                    }
                    paint.drawLine(dColor, 1, 0, rPoints4[0].x, rPoints4[0].y, rPoints4[3].x, rPoints4[3].y);
                    paint.drawLine(dColor, 1, 0, rPoints4[1].x, rPoints4[1].y, rPoints4[4].x, rPoints4[4].y);
                    paint.drawLine(dColor, 1, 0, rPoints4[2].x, rPoints4[2].y, rPoints4[5].x, rPoints4[5].y);
                    //paint.drawPolygon(dColor, 1, 0, rPoints2);
                    paint.drawPolygon(dColor, 1, 0, rPoints3);
                    paint.drawPolygon(dColor, 1, 0, rPoints4);
                    paint.fillPolygon("rgba(" + strColor + ",60)", rPoints);
                    paint.drawPolygon("rgba(" + strColor + ",200)", 1, 0, rPoints);
                    if(paint.defaultUIStyle == "dark"){      
                        paint.drawText("工作经历", "rgb(150,150,150)", font2, 10, 90);
                    }else{
                        paint.drawText("工作经历", "rgb(100,100,100)", font2, 10, 90);
                    }
                    if(iTick == 0){
                        drawRoundText(paint, "大智慧龙软  601819.SH", "Default,14", "rgba(50,123,220,100)", "rgba(50,123,220,150)", 15, 115, 73, 0, 0);
                    }else{
                        drawRoundText(paint, "大智慧龙软  601819.SH", "Default,14", "rgba(170,178,189,50)", "rgba(170,178,189,100)", 15, 115, 73, 0, 0);
                    }
                    if(iTick == 1){
                        drawRoundText(paint, "东方财富  300059.SZ", "Default,14", "rgba(50,123,220,100)", "rgba(50,123,220,150)", 180, 115, 60, 0, 0);
                    }else{
                        drawRoundText(paint, "东方财富  300059.SZ", "Default,14", "rgba(170,178,189,50)", "rgba(170,178,189,100)", 180, 115, 60, 0, 0);
                    }
                    if(iTick == 2){
                        drawRoundText(paint, "东吴证券  601555.SH", "Default,14", "rgba(50,123,220,100)", "rgba(50,123,220,150)", 15, 145, 60, 0, 0);
                    }else{
                        drawRoundText(paint, "东吴证券  601555.SH", "Default,14", "rgba(170,178,189,50)", "rgba(170,178,189,100)", 15, 145, 60, 0, 0);
                    }
                    if(iTick >= 3){
                        drawRoundText(paint, "德意志银行  美股DB", "Default,14", "rgba(50,123,220,100)", "rgba(50,123,220,150)", 165, 145, 73, 0, 0);
                    }else{
                        drawRoundText(paint, "德意志银行  美股DB", "Default,14", "rgba(170,178,189,50)", "rgba(170,178,189,100)", 165, 145, 73, 0, 0);
                    }
                    if(paint.defaultUIStyle == "dark"){      
                        paint.drawText("担任职业", "rgb(150,150,150)", font2, 10, 175);
                    }else{
                        paint.drawText("担任职业", "rgb(100,100,100)", font2, 10, 175);
                    }
                    if(iTick == 1){
                        drawRoundText(paint, "市场销售", "Default,14", "rgba(150,123,220,100)", "rgba(150,123,220,150)", 15, 200, 0, 0, 0);
                    }else{
                        drawRoundText(paint, "市场销售", "Default,14", "rgba(170,178,189,50)", "rgba(170,178,189,100)", 15, 200, 0, 0, 0);
                    }
                    if(iTick == 0){
                        drawRoundText(paint, "产品负责人", "Default,14", "rgba(150,123,220,100)", "rgba(150,123,220,150)", 88, 200, 0, 0, 0);
                        drawRoundText(paint, "CTO  百夫长", "Default,14", "rgba(150,123,220,100)", "rgba(150,123,220,150)", 175, 200, 33, 0, 0);
                    }else{
                        drawRoundText(paint, "产品负责人", "Default,14", "rgba(170,178,189,50)", "rgba(170,178,189,100)", 88, 200, 0, 0, 0);
                        drawRoundText(paint, "CTO  百夫长", "Default,14", "rgba(170,178,189,50)", "rgba(170,178,189,100)", 175, 200, 33, 0, 0);
                    }
                    if(iTick == 3){
                        drawRoundText(paint, "交易员", "Default,14", "rgba(150,123,220,100)", "rgba(150,123,220,150)", 15, 230, 0, 0, 0);
                        drawRoundText(paint, "量化对冲专家", "Default,14", "rgba(150,123,220,100)", "rgba(150,123,220,150)", 75, 230, 0, 0, 0);
                    }else{
                        drawRoundText(paint, "交易员", "Default,14", "rgba(170,178,189,50)", "rgba(170,178,189,100)", 15, 230, 0, 0, 0);
                        drawRoundText(paint, "量化对冲专家", "Default,14", "rgba(170,178,189,50)", "rgba(170,178,189,100)", 75, 230, 0, 0, 0);
                    }
                    if(iTick == 2){
                        drawRoundText(paint, "股票经纪人", "Default,14", "rgba(150,123,220,100)", "rgba(150,123,220,150)", 175, 230, 0, 0, 0);
                        drawRoundText(paint, "期货顾问", "Default,14", "rgba(150,123,220,100)", "rgba(150,123,220,150)", 260, 230, 0, 0, 0);
                    }
                    else{
                        drawRoundText(paint, "股票经纪人", "Default,14", "rgba(170,178,189,50)", "rgba(170,178,189,100)", 175, 230, 0, 0, 0);
                        drawRoundText(paint, "期货顾问", "Default,14", "rgba(170,178,189,50)", "rgba(170,178,189,100)", 260, 230, 0, 0, 0);
                    }
                    if(iTick == 4){
                        drawRoundText(paint, "运营 测试", "Default,14", "rgba(150,123,220,50)", "rgba(150,123,220,150)", 271, 200, 30, 0, 0);
                    }else{
                        drawRoundText(paint, "运营 测试", "Default,14", "rgba(170,178,189,50)", "rgba(170,178,189,100)", 271, 200, 30, 0, 0);
                    }
                    if(paint.defaultUIStyle == "dark"){     
                        paint.drawText("擅长技能", "rgb(150,150,150)", font2, 10, 260);
                    }else{
                        paint.drawText("擅长技能", "rgb(100,100,100)", font2, 10, 260);
                    }
                    drawRoundText(paint, "核心研发", "Default,14", "rgba(170,178,189,50)", "rgba(170,178,189,100)", 15, 285, 0, 0, 0);
                    drawRoundText(paint, "大团领导", "Default,14", "rgba(246,187,67,100)", "rgba(246,187,67,150)", 88, 285, 0, 0, 0);
                    drawRoundText(paint, "销售应酬", "Default,14", "rgba(170,178,189,50)", "rgba(170,178,189,100)", 163, 285, 0, 0, 0);
                    drawRoundText(paint, "写作  短视频", "Default,14", "rgba(170,178,189,50)", "rgba(170,178,189,100)", 237, 285, 32, 0, 0);
                    if(paint.defaultUIStyle == "dark"){     
                        paint.drawText("自创品牌 花卷猫", "rgb(150,150,150)", font2, 10, 316);
                    }else{
                        paint.drawText("自创品牌 花卷猫", "rgb(100,100,100)", font2, 10, 316);
                    }
                    let works = new Array();
                    works.push("自研国产基础框架和软件");
                    works.push("人工智能+多设备联合互动");
                    works.push("金融分析和量化科技基建");
                    works.push("农村工作生活+自媒体");
                    works.push("科学工作和养生爱好者");
                    let works2 = new Array();
                    works2.push("目标与Qt等生态相当");
                    works2.push("目标很多用户");
                    works2.push("目标行业头部");
                    works2.push("目标大量粉丝");
                    works2.push("坚持可持续发展");
                    let lTop = 340;
                    for(let i = 0; i < works.length; i++){
                        let str = works[i];
                        let sFont = "Default,14";
                        let sFont2 = "Default,12";
                        let sRect = new FCRect(10, lTop, tWidth - 10, lTop + 45);
                        let sHeight = sRect.bottom - sRect.top;
                        if(paint.defaultUIStyle == "dark"){     
                            paint.fillRoundRect("rgba(25,25,25,50)", sRect.left, sRect.top, sRect.right, sRect.bottom, 0);
                            paint.fillRoundRect("rgb(50,50,50)", sRect.left, sRect.top, sRect.left + sHeight, sRect.bottom, 0);
                            paint.drawRoundRect("rgb(75,75,75)", 1, 0, sRect.left, sRect.top, sRect.right, sRect.bottom, 0);
                        }else{
                            paint.fillRoundRect("rgba(230,230,230,50)", sRect.left, sRect.top, sRect.right, sRect.bottom, 0);
                            paint.fillRoundRect("rgb(200,200,200)", sRect.left, sRect.top, sRect.left + sHeight, sRect.bottom, 0);
                            paint.drawRoundRect("rgb(175,175,175)", 1, 0, sRect.left, sRect.top, sRect.right, sRect.bottom, 0);
                        }
                        let bColor = "rgb(42,138,195)";
                        let bColor2 = "rgba(42,138,195,200)";
                        if(paint.defaultUIStyle == "dark"){     
                            paint.drawLine("rgb(75,75,75)", 1, 0, sRect.left + sHeight, sRect.top, sRect.left + sHeight, sRect.bottom);
                        }else{
                            paint.drawLine("rgb(175,175,175)", 1, 0, sRect.left + sHeight, sRect.top, sRect.left + sHeight, sRect.bottom);
                        }
                        let noText = (i + 1).toString();
                        let sSize = paint.textSize(noText, sFont);
                        if(paint.defaultUIStyle == "dark"){     
                            paint.drawText(noText, "rgb(200,200,200)", sFont, sRect.left + (sHeight - sSize.cx) / 2, sRect.top + (sHeight - sSize.cy) / 2);
                        }else{
                            paint.drawText(noText, "rgb(50,50,50)", sFont, sRect.left + (sHeight - sSize.cx) / 2, sRect.top + (sHeight - sSize.cy) / 2);
                        }
                        let ttSize = paint.textSize(str, sFont);
                        if(paint.defaultUIStyle == "dark"){     
                            paint.drawText(str, "rgb(200,200,200)", sFont, sRect.left + 55, sRect.top + (sHeight - ttSize.cy) / 2);   
                        }else{
                            paint.drawText(str, "rgb(50,50,50)", sFont, sRect.left + 55, sRect.top + (sHeight - ttSize.cy) / 2);   
                        }
                        let str2 = "(" + works2[i] + ")";
                        let ttSize2 = paint.textSize(str2, sFont2);    
                        if(paint.defaultUIStyle == "dark"){           
                            paint.drawText(str2, "rgb(150,150,150)", sFont2, sRect.left + 60 + ttSize.cx, sRect.top + (sHeight - ttSize2.cy) / 2 + 1);       
                        }else{
                            paint.drawText(str2, "rgb(100,100,100)", sFont2, sRect.left + 60 + ttSize.cx, sRect.top + (sHeight - ttSize2.cy) / 2 + 1); 
                        }
                        if(i > 1){
                            let pText = "副";
                            let pFont = "Default,13";
                            let pSize = paint.textSize(pText, pFont);
                            if(paint.defaultUIStyle == "dark"){       
                                paint.drawLine("rgb(75,75,75)", 1, [3,2], sRect.right - pSize.cx - 20, sRect.top, sRect.right - pSize.cx - 20, sRect.bottom);
                                paint.drawText(pText, "rgb(150,150,150)", pFont, sRect.right - pSize.cx - 10, sRect.top + (sHeight - pSize.cy) / 2);
                            }else{
                                paint.drawLine("rgb(175,175,175)", 1, [3,2], sRect.right - pSize.cx - 20, sRect.top, sRect.right - pSize.cx - 20, sRect.bottom);
                                paint.drawText(pText, "rgb(100,100,100)", pFont, sRect.right - pSize.cx - 10, sRect.top + (sHeight - pSize.cy) / 2);
                            }
                        } 
                        if(iTick == i){
                            let overTimes = tick % 30 * 12;
                            let dRect = new FCRect(sRect.left, sRect.top, sRect.right, sRect.bottom);
                            let dWidth = Math.min(dRect.right - dRect.left, dRect.bottom - dRect.top) / 2;
                            let dInterval = 0;
                            paint.drawRect(bColor, 1, 0, dRect.left, dRect.top, dRect.right, dRect.bottom);
                            if (overTimes < 90) {
                                let fSize = (90 - overTimes) * (dWidth - dInterval) / 60;
                                let eSize = overTimes * (dWidth - dInterval) / 60;
                                paint.drawLine(bColor2, 3, 0, dRect.right - fSize, dRect.top, dRect.right, dRect.top);
                                paint.drawLine(bColor2, 3, 0, dRect.right, dRect.top, dRect.right, dRect.top + eSize);
                            }
                            else if (overTimes < 180) {
                                let fSize = (90 - (overTimes - 90)) * (dWidth - dInterval) / 60;
                                let eSize = (overTimes - 90) * (dWidth - dInterval) / 60;
                                paint.drawLine(bColor2, 3, 0, dRect.right, dRect.bottom - fSize, dRect.right, dRect.bottom);
                                paint.drawLine(bColor2, 3, 0, dRect.right, dRect.bottom, dRect.right - eSize, dRect.bottom);
                            }
                            else if (overTimes < 270) {
                                let fSize = (90 - (overTimes - 180)) * (dWidth - dInterval) / 60;
                                let eSize = (overTimes - 180) * (dWidth - dInterval) / 60;
                                paint.drawLine(bColor2, 3, 0, dRect.left, dRect.bottom, dRect.left + fSize, dRect.bottom);
                                paint.drawLine(bColor2, 3, 0, dRect.left, dRect.bottom, dRect.left, dRect.bottom - eSize);
                            }
                            else if (overTimes < 360) {
                                let fSize = (90 - (overTimes - 270)) * (dWidth - dInterval) / 60;
                                let eSize = (overTimes - 270) * (dWidth - dInterval) / 60;
                                paint.drawLine(bColor2, 3, 0, dRect.left, dRect.top, dRect.left + eSize, dRect.top);
                                paint.drawLine(bColor2, 3, 0, dRect.left, dRect.top, dRect.left, dRect.top + fSize);
                            }
                        }
                        lTop += 55;
                    }
                    if(paint.defaultUIStyle == "dark"){       
                        paint.drawText("研发中心 (对话前请说明原因)", "rgb(150,150,150)", font2, 10, 620);
                    }else{
                        paint.drawText("研发中心 (对话前请说明原因)", "rgb(100,100,100)", font2, 10, 620);
                    }
                    drawRoundText(paint, "江阴市  峭岐镇袁家庄南部农田  无锡各地铁站可会面", "Default,14", "rgba(170,178,189,50)", "rgba(170,178,189,100)", 15, 645, 45, 194, 0);
                }
                let aR = 40;
                let aLeft = 95;
                let indexStrs = new Array();
                indexStrs.push("第1页");
                indexStrs.push("第2页");
                indexStrs.push("第3页");
                indexStrs.push("第4页");
                indexStrs.push("第5页");
                indexStrs.push("第6页");
                let iFont = "Default,9";
                for(let i = 0; i < indexStrs.length; i++){
                    let aRect = new FCRect(aLeft, 52, aLeft + aR, 52 + 30);
                    aRect.left += 2;
                    aRect.top += 5;
                    aRect.right -= 2;
                    aRect.bottom -= 5;
                    let iStr = indexStrs[i];
                    let iSize = paint.textSize(iStr, iFont);
                    if(i == showIndex){
                        if(paint.defaultUIStyle == "dark"){       
                            paint.fillRoundRect("rgb(50,50,50)", aRect.left, aRect.top, aRect.right, aRect.bottom, 0);
                            paint.drawText(iStr, "rgb(200,200,200)", iFont, aRect.left + (aRect.right - aRect.left - iSize.cx) / 2, aRect.top + (aRect.bottom - aRect.top - iSize.cy) / 2);
                        }else{
                            paint.fillRoundRect("rgb(200,200,200)", aRect.left, aRect.top, aRect.right, aRect.bottom, 0);
                            paint.drawText(iStr, "rgb(50,50,50)", iFont, aRect.left + (aRect.right - aRect.left - iSize.cx) / 2, aRect.top + (aRect.bottom - aRect.top - iSize.cy) / 2);
                        }
                    }else{
                        if(paint.defaultUIStyle == "dark"){   
                            paint.fillRoundRect("rgba(50,50,50,100)", aRect.left, aRect.top, aRect.right, aRect.bottom, 0);
                            paint.drawText(iStr, "rgb(150,150,150)", iFont, aRect.left + (aRect.right - aRect.left - iSize.cx) / 2, aRect.top + (aRect.bottom - aRect.top - iSize.cy) / 2);
                        }else{
                            paint.fillRoundRect("rgba(200,200,200,100)", aRect.left, aRect.top, aRect.right, aRect.bottom, 0);
                            paint.drawText(iStr, "rgb(100,100,100)", iFont, aRect.left + (aRect.right - aRect.left - iSize.cx) / 2, aRect.top + (aRect.bottom - aRect.top - iSize.cy) / 2);
                        }
                    }
                    aLeft += aR;
                }
                return;
            }
        };

        /*
        * 重绘边框的实现方法
        * view:视图
        * paint:绘图对象
        * clipRect:裁剪区域
        */
        gPaint.onPaintBorder = function (view, paint, clipRect) {
            onPaintBorderDefault(view, paint, clipRect);
        };

        /*
         * 重置大小
         */
        let resizeAll = function () {
            canvas.width = document.documentElement.clientWidth;
            canvas.height = document.documentElement.clientHeight;
            scaleCanvas(gPaint);
            updateViewDefault(gPaint.views);
            invalidate(gPaint);
        };

        /*
        * 监听大小改变
        */
        window.onresize = function () {
            resizeAll();
        };

        /*
        * 旋转监听
        */
        window.onorientationchange = function () {
            resizeAll();

        };

        let rates = new Array();
        rates.push(98);
        rates.push(98);
        rates.push(90);
        rates.push(80);
        rates.push(80);
        rates.push(90);

        let aimrates = new Array();

        let tick = 0;

        let checkPaint = function () {
            if(tick == 0 || tick % 30 == 0){
                aimrates = new Array();
                aimrates.push(Math.random() * 100);
                aimrates.push(Math.random() * 100);
                aimrates.push(Math.random() * 100);
                aimrates.push(Math.random() * 100);
                aimrates.push(Math.random() * 100);
                aimrates.push(Math.random() * 100);
            }
            tick++;
            if(tick > 360){
                tick = 0;
            }
            if(aimrates.length > 0){
                for(let i = 0; i < aimrates.length; i++){
                    if(rates[i] != aimrates[i]){
                        if(rates[i] < aimrates[i]){
                            rates[i] = rates[i] + (aimrates[i] - rates[i]) / 3;
                        }else if(rates[i] > aimrates[i]){
                            rates[i] = rates[i] + (aimrates[i] - rates[i]) / 3;
                        }
                        if (Math.abs(rates[i] - aimrates[i]) < 2){
                            rates[i] =  aimrates[i];
                        }
                    }
                }
            }
            invalidate(gPaint);
        };

        updateViewDefault(gPaint.views);
        //刷新界面
        invalidate(gPaint);
        setInterval(checkPaint, 30);
    </script>
</body>
</html>
